Use mixed-radix decompositions for CurveFFT - #166
Merged
Conversation
Contributor
Author
|
Follow-up CurveFFT kernel experiments (2026-08-23) I evaluated the remaining kernel ideas on top of this PR. None of items 1-7
Item 8 was kept on a separate experimental branch as requested:
Because DFT32 regresses portable multicore performance, I did not open the |
ValarDragon
marked this pull request as ready for review
August 24, 2026 12:15
ValarDragon
force-pushed
the
optimize-one-inversion-curve-fft-clean
branch
from
September 10, 2026 14:39
2b1766b to
ad9c854
Compare
Base automatically changed from
optimize-one-inversion-curve-fft-clean
to
main
September 11, 2026 14:57
ValarDragon
force-pushed
the
optimize-mixed-radix-curve-fft-pr
branch
from
September 11, 2026 15:05
2558461 to
303f4d7
Compare
ValarDragon
force-pushed
the
optimize-mixed-radix-curve-fft-pr
branch
from
September 11, 2026 15:07
303f4d7 to
76ed657
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Based on #164, which is now merged into
main. This PR adds no assembly changes.What changed
k >= 6into DFT8 and DFT16tiers. The Orchard schedule is
16 x 16 x 8;k = 13uses16 x 8 x 8 x 8.transposing into contiguous, locally bit-reversed codelets.
one large affine inversion batch per substage.
free negation for exponents in the upper half of the root-of-unity cycle.
alternate one N-point affine scratch vector with the output.
affine GLV ladders, and first-value accumulator seeding.
k = 6:k = 3and4are already oneDFT8/DFT16 codelet, while a
2 x 16split atk = 5saves no scalarmultiplications and would add transpose traffic.
Operation counts
The tests instrument the executed path rather than only checking the
factorization on paper.
For a plain radix-2 Cooley-Tukey FFT with no codelets, each layer has
N / 2butterflies and one multiplication by the trivial twiddle
1per block. Thenumber of nontrivial point-scalar multiplications is therefore
kN / 2 - (N - 1).The codelet tiers use 14, 16, 18, and 18 sequential affine-addition
inversion batches respectively at
k = 10..13. The tests pin every batchwidth. The extra
k = 13copy required by the even number of tiers isincluded in its six measured layout passes.
CurveFFT benchmark
Four rotated Criterion rounds per revision, with compilation outside the
measurement window. Each row is the median of the four reported centers.
Linux compares the portable parent
1dc0e71to algorithm commit3d5c478;the two Mac hosts use the same comparison with the existing field ASM enabled.
Both Macs reported no thermal or performance warning. Pre-run process checks
found no competing benchmark workloads. The two Linux hosts were idle before
the run; post-run load reflected only the benchmark itself.
Correctness
k = 13.exceptional fallbacks through
k = 12;k = 13gets a direct comparisonon both curves.
permutation is bijective for
k = 6..16.without the multicore feature.
Rebased onto current
mainafter #164 merged. The branch contains one mixed-radix implementation commit and no inherited assembly changes.